package cn.iocoder.yudao.module.water.service.month;

import java.util.*;
import javax.validation.*;
import cn.iocoder.yudao.module.water.controller.admin.month.vo.*;
import cn.iocoder.yudao.module.water.dal.dataobject.month.ReportMonthDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import com.baomidou.dynamic.datasource.annotation.DS;

/**
 * 月报 Service 接口
 *
 * @author 左达成
 */
public interface ReportMonthService {

    /**
     * 创建月报
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createReportMonth(@Valid ReportMonthCreateReqVO createReqVO);

    /**
     * 更新月报
     *
     * @param updateReqVO 更新信息
     */
    void updateReportMonth(@Valid ReportMonthUpdateReqVO updateReqVO);

    /**
     * 删除月报
     *
     * @param id 编号
     */
    void deleteReportMonth(Long id);

    /**
     * 获得月报
     *
     * @param id 编号
     * @return 月报
     */
    ReportMonthDO getReportMonth(Long id);

    /**
     * 获得月报列表
     *
     * @param ids 编号
     * @return 月报列表
     */
    List<ReportMonthDO> getReportMonthList(Collection<Long> ids);

    /**
     * 获得月报分页
     *
     * @param pageReqVO 分页查询
     * @return 月报分页
     */
    PageResult<ReportMonthDO> getReportMonthPage(ReportMonthPageReqVO pageReqVO);

    /**
     * 获得月报列表, 用于 Excel 导出
     *
     * @param exportReqVO 查询条件
     * @return 月报列表
     */
    List<ReportMonthDO> getReportMonthList(ReportMonthExportReqVO exportReqVO);


    /**
     * 获得1个月月报
     *
     * @param date 时间
     * @return 月报列表
     */
    @DS("report")
    List<ReportMonthDO> getReportOneMonthList(String date);

    @DS("report")
    List<ReportMonthDO> get5EDay();

    @DS("report")
    List<ReportMonthDO> getNDay(NDayReqVO vo);

}
